package com.dtx.visitor;

import java.util.Iterator;

/**
 * 虽然Entry类在本质上与Composite模式中的Entry类是一样的,不过本章中的Entry类实现(implements)了Element接口。
 * 这是为了让Entry类适用于Visitor模式。实际上实现Element接口中声明的抽象类accept的是Entry类的子类————File类和Directory类。
 * add方法仅对Directory类有效,因此在Entry类中,我们让它简单地报错。同样地,用于获取Iterator的iterator方法也仅对
 * Directory类有效,我们也让它简单地报错。
 *
 */
public abstract class Entry implements Element{

    /**
     * 获取名字
     * @return
     */
    public abstract String getName();

    /**
     * 获取大小
     * @return
     */
    public abstract Integer getSize();

    /**
     * 增加目录条目
     * @param entry
     * @return
     * @throws FileTreatmentException
     */
    public Entry add(Entry entry) throws FileTreatmentException{
        throw new FileTreatmentException();
    }

    /**
     * 生成Iterator
     * @return
     * @throws FileTreatmentException
     */
    public Iterator<Entry> iterator() throws FileTreatmentException{
        throw new FileTreatmentException();
    }

    /**
     * 显示字符串
     * @return
     */
    @Override
    public String toString() {
        return getName() + " ( " + getSize() + " ) ";
    }
}
